#include <stdio.h>

int main() {
    int a[4][5] = {{1, 2, 3, 4, 5}, 
            {6, 7, 8, 9, 10}, 
            {11, 12, 13, 14, 15}, 
            {16, 17, 18, 19, 20}};
    // p1是一级指针
    int *p1;
    printf("使用*p1输出数组:\n");
    for (int i = 0; i < sizeof(a) / sizeof(a[0]); ++i) {
        p1 = a[i];
        for (int j = 0; j < sizeof(a[0]) / sizeof(a[0][0]); ++j) 
            printf("%3d ", p1[j]);
        printf("\n");
    }
    printf("\n");
    printf("使用(*p2)[5]输出数组:\n");
    int (*p2)[5] = a;
    for (int i = 0; i < sizeof(a) / sizeof(a[0]); ++i) {
        for (int j = 0; j < sizeof(a[0]) / sizeof(a[0][0]); ++j) 
            printf("%3d ", p2[i][j]);
        printf("\n");
    }    

    printf("\n");
    printf("\n");
    p1 = a[2];
    p2 = a;
    printf("使用*p1获取a[2][2]的内容:%d, 获取a[2][2]的地址:%p:\n", p1[2], &p1[2]);
    printf("使用(*p2)[5]获取a[2][2]的内容:%d, 获取a[2][2]的地址:%p:\n", p2[2][2], &p2[2][2]);
    return 0;
}